package com.scau402.system.service.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.scau402.common.annotation.DataScope;
import com.scau402.common.utils.DateUtils;
import com.scau402.common.utils.SecurityUtils;
import com.scau402.system.domain.SysTenant;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.scau402.system.mapper.WmsJadeTypeMapper;
import com.scau402.system.domain.WmsJadeType;
import com.scau402.system.service.IWmsJadeTypeService;

/**
 * 翡翠品类Service业务层处理
 * 
 * @author ruoyi
 * @date 2023-06-26
 */
@Service
public class WmsJadeTypeServiceImpl implements IWmsJadeTypeService 
{
    @Autowired
    private WmsJadeTypeMapper wmsJadeTypeMapper;

    /**
     * 查询翡翠品类
     * 
     * @param id 翡翠品类主键
     * @return 翡翠品类
     */
    @Override
    public WmsJadeType selectWmsJadeTypeById(Long id)
    {
        return wmsJadeTypeMapper.selectWmsJadeTypeById(id);
    }

    /**
     * 查询翡翠品类列表
     * 
     * @param wmsJadeType 翡翠品类
     * @return 翡翠品类
     */
    @Override
    @DataScope(tenantAlias = "t", userAlias = "u")
    public List<WmsJadeType> selectWmsJadeTypeList(WmsJadeType wmsJadeType)
    {
        wmsJadeType.setTenantId(SecurityUtils.getLoginUser().getTenantId());
        return wmsJadeTypeMapper.selectWmsJadeTypeList(wmsJadeType);
    }

    /**
     * 新增翡翠品类
     * 
     * @param wmsJadeType 翡翠品类
     * @return 结果
     */
    @Override
    public int insertWmsJadeType(WmsJadeType wmsJadeType)
    {
        wmsJadeType.setCreateTime(DateUtils.getNowDate());
        wmsJadeType.setTenantId(SecurityUtils.getLoginUser().getTenantId());
        return wmsJadeTypeMapper.insertWmsJadeType(wmsJadeType);
    }

    /**
     * 修改翡翠品类
     * 
     * @param wmsJadeType 翡翠品类
     * @return 结果
     */
    @Override
    public int updateWmsJadeType(WmsJadeType wmsJadeType)
    {
        wmsJadeType.setUpdateTime(DateUtils.getNowDate());
        wmsJadeType.setTenantId(SecurityUtils.getLoginUser().getTenantId());
        return wmsJadeTypeMapper.updateWmsJadeType(wmsJadeType);
    }

    /**
     * 批量删除翡翠品类
     * 
     * @param ids 需要删除的翡翠品类主键
     * @return 结果
     */
    @Override
    public int deleteWmsJadeTypeByIds(Long[] ids)
    {
        return wmsJadeTypeMapper.deleteWmsJadeTypeByIds(ids);
    }

    /**
     * 删除翡翠品类信息
     * 
     * @param id 翡翠品类主键
     * @return 结果
     */
    @Override
    public int deleteWmsJadeTypeById(Long id)
    {
        return wmsJadeTypeMapper.deleteWmsJadeTypeById(id);
    }

    @Override
    public List<WmsJadeType> buildJadeTypeTree(List<WmsJadeType> list) {
        Map<Long, List<WmsJadeType>> map = new HashMap<>();
        for (WmsJadeType jadeType : list) {
            Long parentId = jadeType.getParentId();
            if (!map.containsKey(parentId)) {
                map.put(parentId, new ArrayList<>());
            }
            map.get(parentId).add(jadeType);
        }
        return buildTree(map, 0l);
    }

    @Override
    public int setTenatBasicType(Long tenantId) {
        return wmsJadeTypeMapper.setBasicJadeType(tenantId);
    }



    public static List<WmsJadeType> buildTree(Map<Long, List<WmsJadeType>> map, Long parentId) {
        List<WmsJadeType> children = map.get(parentId);
        if (children == null) {
            return new ArrayList<>();
        }

        for (WmsJadeType child : children) {
            child.setChildren(buildTree(map, child.getId()));
        }

        return children;
    }

}
